#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/fcntl.h>
#include <stdlib.h>
#include <unistd.h> // 这个是close和write需要的头文件
#include "my_stdio.h"


mFILE* mfopen(const char* filename,const char* mode)
{
	int fd=-1;
	if(strcmp(mode,"r")==0)
	{
		fd=open(filename,O_RDONLY);	
	}
	else if(strcmp(mode,"w")==0)
	{
		fd=open(filename,O_CREAT|O_WRONLY|O_TRUNC,0666);
	}
	else if(strcmp(mode,"a")==0)
	{
		fd=open(filename,O_CREAT|O_WRONLY|O_APPEND,0666);	
	}
	if(fd<0)
		return NULL;
	mFILE* mf=(mFILE*)malloc(sizeof(mFILE));
	if(!mf)
	{
		close(fd);		
		return NULL;
	}
	mf->fileno=fd;
	mf->flag=FLUSH_LINE;
	mf->size=0;
	mf->cap=SIZE;
	

	return mf;
}

int mfwrite(const void*ptr,int num,mFILE* stream)
{
	memcpy(stream->outbuffer+stream->size,ptr,num);
	stream->size+=num;
	if(stream->flag==FLUSH_LINE && stream->size>0 && stream->outbuffer[stream->size-1]=='\n')
	{
		mfflush(stream);	
	}
	return num;
}
void mfflush(mFILE* stream)
{
	if(stream->size>0)
	{
		write(stream->fileno,stream->outbuffer,stream->size);
		stream->size=0;
	}
}
void mfclose(mFILE* stream)
{
	if(stream->size>0)
	{
		mfflush(stream);	
	}
	close(stream->fileno);

}
